//#include <stdio.h>
//#include <stdlib.h>
//
//int main() 
//{
//    int m;
//    scanf_s("%d", &m); 
//
//    int* arr = (int*)malloc(m * sizeof(int));
//    for (int i = 0; i < m; i++) 
//    {
//        scanf_s("%d", &arr[i]); 
//    }
//
//    int n;
//    scanf_s("%d", &n); 
//
//    if (n == 0) 
//    {
//        printf("true\n");
//        free(arr);
//        return 0;
//    }
//
//    long long total_max_ones = 0; 
//    int i = 0;
//
//    while (i < m)
//    {
//        if (arr[i] == 0)
//        {
//            int start = i;
//            while (i < m && arr[i] == 0) 
//            {
//                i++;
//            }
//            int end = i - 1;
//            int L = end - start + 1; 
//
//            int left_restricted = (start > 0) ? (arr[start - 1] == 1) : 0;
//            int right_restricted = (end < m - 1) ? (arr[end + 1] == 1) : 0;
//
//            int available = L;
//            if (left_restricted) available--;
//            if (right_restricted) available--;
//            if (available < 0) available = 0;
//
//            total_max_ones += (available + 1) / 2;
//        }
//        else 
//        {
//            i++;
//        }
//    }
//
//    if (n <= total_max_ones) 
//    {
//        printf("true\n");
//    }
//    else {
//        printf("false\n");
//    }
//
//    free(arr);
//    return 0;
//}

#include <stdio.h>
#include <stdlib.h>

int cmp_count(const void* a, const void* b)
{
    int* ia = (int*)a;
    int* ib = (int*)b;
    if (ib[1] != ia[1]) 
    {
        return ib[1] - ia[1];
    }
    return ia[0] - ib[0];
}

int cmp_index(const void* a, const void* b) 
{
    return *(int*)a - *(int*)b;
}

int main() 
{
    int n, m, k, l, d;
    scanf_s("%d %d %d %d %d", &n, &m, &k, &l, &d);

    int* row_cnt = (int*)calloc(n, sizeof(int)); 
    int* col_cnt = (int*)calloc(m, sizeof(int)); 

    for (int i = 0; i < d; i++)
    {
        int x1, y1, x2, y2;
        scanf_s("%d %d %d %d", &x1, &y1, &x2, &y2);

        if (x1 == x2)
        { 
            int col = (y1 < y2) ? y1 : y2;
            if (col >= 1 && col < m) 
            {
                col_cnt[col]++;
            }
        }
        else if (y1 == y2) 
        { 
            int row = (x1 < x2) ? x1 : x2;
            if (row >= 1 && row < n) 
            {
                row_cnt[row]++;
            }
        }
    }

    int** row_data = (int**)malloc((n - 1) * sizeof(int*));
    for (int i = 1, idx = 0; i < n; i++, idx++)
    {
        row_data[idx] = (int*)malloc(2 * sizeof(int));
        row_data[idx][0] = i;   
        row_data[idx][1] = row_cnt[i]; 
    }

    qsort(row_data, n - 1, sizeof(int*), cmp_count);

    int* selected_rows = (int*)malloc(k * sizeof(int));
    for (int i = 0; i < k; i++)
    {
        selected_rows[i] = row_data[i][0];
    }

    qsort(selected_rows, k, sizeof(int), cmp_index);

    int** col_data = (int**)malloc((m - 1) * sizeof(int*));
    for (int j = 1, idx = 0; j < m; j++, idx++) 
    {
        col_data[idx] = (int*)malloc(2 * sizeof(int));
        col_data[idx][0] = j;   
        col_data[idx][1] = col_cnt[j]; 
    }

    qsort(col_data, m - 1, sizeof(int*), cmp_count);

    int* selected_cols = (int*)malloc(l * sizeof(int));
    for (int i = 0; i < l; i++) 
    {
        selected_cols[i] = col_data[i][0];
    }

    qsort(selected_cols, l, sizeof(int), cmp_index);

    for (int i = 0; i < k; i++)
    {
        printf("%d", selected_rows[i]);
        if (i < k - 1) printf(" ");
    }
    printf("\n");

    for (int i = 0; i < l; i++) 
    {
        printf("%d", selected_cols[i]);
        if (i < l - 1) printf(" ");
    }
    printf("\n");

    free(row_cnt);
    free(col_cnt);
    for (int i = 0; i < n - 1; i++) free(row_data[i]);
    free(row_data);
    for (int i = 0; i < m - 1; i++) free(col_data[i]);
    free(col_data);
    free(selected_rows);
    free(selected_cols);

    return 0;
}